Пересилання N послідовних байт з однієї області пам’яті в іншу:
org 100h
N EQU 03h
mvi c,N
lxi d,SRC
lxi h,DST
call MOVE
nop
hlt
MOVE:
ldax d
mov m,a
inx d
inx h
dcr c
jnz MOVE
ret
SRC db 01h,02h,03h
DST db 00h,00h,00h
---------------------------------------------------------------------
Пересилання послідовності байтів(до заданого) з однієї облісті пам’яті в іншу.
org 100h
ENDCHAR EQU 00h
mvi c,ENDCHAR
lxi d,SRC
lxi h,DST
call MOVE
nop
hlt
MOVE:
ldax d
mov m,a
inx d
inx h
cmp c
jnz MOVE
ret
SRC db 01h,02h,03h,00h
DST db 00h,00h,00h,00h
----------------------------------------------------------------Обчислення суми однобайтових елементів масиву
org 100h
N EQU 05h
mvi c,N
lxi h,ARRAY
call ARRSUM ; DE=SUM(ARRAY[i])
nop
hlt
ARRSUM:
lxi d,0000h
L00:
mov a,m
add e
mov e,a
mov a,d
aci 00h
mov d,a
inx h
dcr c
jnz L00
ret
ARRAY db 0F0h,0F0h,07h,08h,09h
---------------------------------------------------------------------
Обчислення контрольної суми області пам’яті шляхом додавання за модулем 216 старших і молодших тетрад кожного байту окремо; результат програми – два байти
org 100h
N EQU 05h
mvi c,N
lxi h,ARRAY
call ARRCS ; DE=CHECKSUM(ARRAY[i])
nop
hlt
ARRCS:
lxi d,0000h
L00:
mov a,m
ani 0Fh
add e
mov e,a
mov a,d
aci 00h
mov d,a
mov a,m
ani 0F0h
rrc
rrc
rrc
rrc
add e
mov e,a
mov a,d
aci 00h
mov d,a
inx h
dcr c
jnz L00
ret
ARRAY db 0F0h,0F0h,07h,08h,09h
---------------------------------------------------------------------
Додавання двох багатобайтових чисел.
org 100h
N EQU 04h
mvi c,N
lxi d,SRC
lxi h,DST
call ADDN ; DST = DST + SRC
nop
hlt
ADDN:
ora a
L00:
ldax d
adc m
mov m,a
inx d
inx h
dcr c
jnz L00
ret
DST db 78h,34h,56h,12h
SRC db 78h,34h,56h,12h
---------------------------------------------------------------------
Обчислення суми N двобайтових елементів масиву.
org 100h
N EQU 03h
mvi a,N
lxi b,ARRAY
call MADD2
hlt
MADD2:
lxi h,0000h
L00:
push psw
ldax b
mov e,a
inx b
ldax b
mov d,a
inx b
dad d
pop psw
dcr a
jnz L00
ret
ARRAY: dw 1002h
dw 5005h
dw 3009h
---------------------------------------------------------------------
Порівняння двох чисел і запису в задану комірку пам’яті більшого.
org 100h
N1 EQU 10h
N2 EQU 20h
lxi h,DST
mvi b,N1
mvi c,N2
call CMPSAVE
nop
hlt
CMPSAVE:
mov a,b
cmp c
jnc L00
mov m,c
ret
L00:
mov m,b
ret
DST db 00h
---------------------------------------------------------------------
Перемноження двох однобайтових чисел без знака
org 100h
mvi c,0FFh
mvi b,0AAh
call MUL
nop
hlt
MUL:
mvi d,00h
mov e,b
lxi h,0000h
mvi a,08h
L00:
push psw
mov a,c
rrc
mov c,a
jnc L01
dad d
L01:
xra a
mov a,d
ral
mov d,a
xra a
mov a,e
ral
mov e,a
mvi a,00h
adc d
mov d,a
pop psw
dcr a
jnz L00
ret
---------------------------------------------------------------------
Запис нулів в облать пам’яті з адреси А1 до адреси А2 включно.
org 100h
A1 EQU 0200h
A2 EQU 0210h
lxi h,A1
lxi d,A2
call ZERO ; A2 MUST BE >= A1
nop
hlt
ZERO:
mov a,d
cmp h
jnz L00
mov a,e
cmp l
jz L01
L00:
mvi m,00h
inx h
jmp ZERO
L01:
mvi m,00h
ret
---------------------------------------------------------------------
Знаходження максимального числа в масиві даних, представлених як ціле число без знаку.
org 100h
N EQU 05h
mvi c,N-1
lxi h,ARRAY
call ARRMAX ; A=MAX(ARRAY[i])
nop
hlt
ARRMAX:
mov a,m
L00:
inx h
cmp m
jnc L01
mov a,m
L01:
dcr c
jnz L00
ret
ARRAY db 060h,070h,0F7h,98h,0FFh
---------------------------------------------------------------------
Віднімання двох багатобайтових десяткових двійково – кодованих чисел без знака.
org 100h
N EQU 02h
mvi c,N
lxi h,SRC + N - 1
lxi d,DST + N - 1
call SUBBCD ; DST = DST - SRC
nop
hlt
SUBBCD:
stc
L00:
mvi a,99h
aci 00h
sub m
xchg
add m
daa
mov m,a
xchg
dcx h
dcx d
dcr c
jnz L00
ret
DST: db 56h
db 73h
SRC: db 24h
db 89h
Ділення 16-ти розрядного числа без знака на 8-ми розрядне число без знака.
org 100h
lxi d,0319h
m...